var interfaceForXlsImportStore;
var interfaceForXlsImportWin;
var interfaceForXlsImporttGrid;
var exSubNamecm;
var cm;
var payclasscm;

function interfaceForXlsImport() {

	/**
	 * Excel文件类别的下拉框
	 */
	var typeCombox = new Ext.form.ComboBox({
				fieldLabel : 'Excel文件类别',
				store : Ext.baseInfoForXlsImport.typeStore,
				displayField : 'ex_publicname',
				valueField : 'ex_publictype',
				typeAhead : true,
				mode : 'local',
				triggerAction : 'all',
				readOnly : true,
				id : 'exPublicType',
				emptyText : '请选择...',
				selectOnFocus : true,
				anchor : '90%',
				width : 150
			});

	typeCombox.on('select', function() {
		var initrecord = Ext.util.JSON
				.decode("{'publicIntefaceDetial':{'result':[{cloNum:'B',exSubCode:'period'},{cloNum:'A',exSubCode:'employeecode'}],'totalCount':'2'}}");

		interfaceForXlsImportWin.findById('exClassId').setDisabled(true);
		var typeComboxValue = typeCombox.getValue();
		// excell文件类别选项为薪资项目
		if (typeComboxValue == 1015) {
			interfaceForXlsImportStore.removeAll();
			interfaceForXlsImportStore.loadData(initrecord, true);
			interfaceForXlsImportWin.findById('exClassId').setDisabled(false);
			exClassIdStore.proxy = new Ext.data.HttpProxy({
						url : 'ExeclCustomize!findExClassIdByCompanyCode.action'
					});
			exClassIdStore.reload();
			interfaceForXlsImporttGrid.reconfigure(interfaceForXlsImportStore,
					payclasscm);
		}
		// excell文件类别选项为社保项目
		else if (typeComboxValue == 1017) {
			interfaceForXlsImportStore.removeAll();
			Ext.getCmp('addItems').setDisabled(false);
			Ext.getCmp('deleteItems').setDisabled(false);
			interfaceForXlsImportStore.loadData(initrecord, true);

			exClassIdStore.proxy = new Ext.data.HttpProxy({
						url : 'ExeclCustomize!querySocialByCompanyCode.action'
					});
			socialStore.reload();
			interfaceForXlsImporttGrid.reconfigure(interfaceForXlsImportStore,
					cm);
		}
		// excell文件类别选项为雇员项目
		else if (typeComboxValue == 1013) {
			interfaceForXlsImportStore.removeAll();
			Ext.getCmp('addItems').setDisabled(false);
			Ext.getCmp('deleteItems').setDisabled(false);
			Ext.Ajax.request({
				url : 'ExeclCustomize!queryPublicDetail.action',
				method : 'post',
				params : {
					isNecessary : 1,
					exPublicType : 1013
				},
				success : function(response, result) {
					var responseTextVale = Ext.util.JSON
							.decode(response.responseText);
					var subName = responseTextVale.publicDetial.result;
					var emptotalCount = responseTextVale.publicDetial.totalCount;
					var str = '';
					for (var i = 0; i < emptotalCount; i++) {
						str += '{exSubCode:\'' + subName[i].exSubCode + '\'},';
					}
					str = str.substr(0, str.length - 1);
					var emprecord = Ext.util.JSON
							.decode("{'publicIntefaceDetial':{'result':[" + str
									+ "],'totalCount':'" + emptotalCount
									+ "'}}");
					interfaceForXlsImportStore.loadData(emprecord, true);
				}
			});
			empStore.removeAll();
			empStore.baseParams = {
				isNecessary : 0
			}
			empStore.reload();
			interfaceForXlsImporttGrid.reconfigure(interfaceForXlsImportStore,
					exSubNamecm);
		}

	});

	/**
	 * 雇员输入项的数据源
	 */
	empStore = new Ext.data.Store({
		proxy : new Ext.data.HttpProxy({
					url : 'ExeclCustomize!queryPublicDetail.action?exPublicType='
							+ 1013
				}),
		reader : new Ext.data.JsonReader({
					root : 'publicDetial.result',
					totalProperty : 'publicDetial.totalCount'
				}, [{
							name : 'exSubId',
							mapping : 'exSubId'
						}, {
							name : 'exSubCode',
							mapping : 'exSubCode'
						}, {
							name : 'exSubName',
							mapping : 'exSubName'
						}])
	});

	/**
	 * 雇员输入项的数据源
	 */
	empAllStore = new Ext.data.Store({
				proxy : new Ext.data.HttpProxy({
							url : 'ExeclCustomize!queryPublicDetail.action'
						}),
				reader : new Ext.data.JsonReader({
							root : 'publicDetial.result',
							totalProperty : 'publicDetial.totalCount'
						}, [{
									name : 'exSubId',
									mapping : 'exSubId'
								}, {
									name : 'exSubCode',
									mapping : 'exSubCode'
								}, {
									name : 'exSubName',
									mapping : 'exSubName'
								}])
			});
	empAllStore.load();

	/**
	 * 社保输入项的数据源
	 */
	socialStore = new Ext.data.Store({
				proxy : new Ext.data.HttpProxy({
							url : 'ExeclCustomize!querySocialByCompanyCode.action'
						}),
				reader : new Ext.data.JsonReader({
							root : 'socialItems.result',
							id : 'socialItemsid'
						}, [{
									name : 'socialSecurityId',
									mapping : 'socialSecurityId'
								}, {
									name : 'showName',
									mapping : 'showName'
								}, {
									name : 'companyCode',
									mapping : 'companyCode'
								}])
			});
	/**
	 * 对应Id数据源
	 */
	exClassIdStore = new Ext.data.Store({
				proxy : new Ext.data.HttpProxy({
							url : 'ExeclCustomize!findExClassIdByCompanyCode.action'
						}),
				reader : new Ext.data.JsonReader({
							root : 'payClassIds.result',
							id : 'id'
						}, [{
									name : 'payClassName',
									mapping : 'payClassName'
								}, {
									name : 'payClassId',
									mapping : 'payClassId'
								}, {
									name : 'companyCode',
									mapping : 'companyCode'
								}])
			});

	/**
	 * 对应Id的下拉框
	 */
	var exClassIdCombox = new Ext.form.ComboBox({
				fieldLabel : '对应Id',
				store : exClassIdStore,
				displayField : 'payClassName',
				valueField : 'payClassId',
				id : 'exClassId',
				typeAhead : true,
				mode : 'local',
				triggerAction : 'all',
				emptyText : '请选择...',
				selectOnFocus : true,
				anchor : '90%',
				disabled : true,
				width : 150
			});

	exClassIdCombox.on('select', function() {
				Ext.getCmp('addItems').setDisabled(false);
				Ext.getCmp('deleteItems').setDisabled(false);
				var exClassIdComboxValue = exClassIdCombox.getValue();
				exClassItemsIdStore.baseParams = {
					payClassId : exClassIdComboxValue
				}
				exClassItemsIdStore.load();

			});

	/**
	 * 对应payClassItem数据源
	 */
	exClassItemsIdStore = new Ext.data.Store({
		proxy : new Ext.data.HttpProxy({
					url : 'ExeclCustomize!queryPayClassItemsByPayClassId.action'
				}),
		reader : new Ext.data.JsonReader({
					root : 'payClassItems.result',
					id : 'payClassItemsid'
				}, [{
							name : 'name',
							mapping : 'name'
						}, {
							name : 'payClassId',
							mapping : 'payClassId'
						}, {
							name : 'companyCode',
							mapping : 'companyCode'
						}, {
							name : 'payClassItemId',
							mapping : 'payClassItemId'
						}])
	});

	var exClassItemsViewIdStore = new Ext.data.Store({
		proxy : new Ext.data.HttpProxy({
					url : 'ExeclCustomize!queryPayClassItemsByPayClassId.action'
				}),
		reader : new Ext.data.JsonReader({
					root : 'payClassItems.result',
					id : 'payClassItemsid'
				}, [{
							name : 'name',
							mapping : 'name'
						}, {
							name : 'payClassId',
							mapping : 'payClassId'
						}, {
							name : 'companyCode',
							mapping : 'companyCode'
						}, {
							name : 'payClassItemId',
							mapping : 'payClassItemId'
						}])
	});
	exClassItemsViewIdStore.load();
	
	var interfaceForXlsImportPanel = new Ext.form.FormPanel({
		anchor : '90%',
		frame : true,
		hideLables : false,
		id : 'interfaceForXlsImportPanel',
		buttonAlign : 'right',
		bodyStyle : 'padding:5px 5px 0',
		items : [{
					layout : 'column',
					items : [{
								columnWidth : .5,
								layout : 'form',
								items : [{
											layout : 'form',
											xtype : 'label',
											id : 'company_chinese_code',
											text : '客户中文名称 ：'
													+ session_companyName
										}, {
											layout : 'form',
											items : [typeCombox]
										}]
							}, {
								columnWidth : .5,
								layout : 'form',
								items : [{
											xtype : 'hidden',
											id : 'exInterfaceId'
										}, {
											xtype : 'textfield',
											fieldLabel : '接口名称',
											name : 'exName',
											id : 'exName',
											anchor : '90%'
										}, {

											layout : 'form',
											items : [exClassIdCombox]
										}]

							}, {
								columnWidth : 1,
								layout : 'form',
								items : [{
											xtype : 'textarea',
											fieldLabel : '说明',
											name : 'memo',
											id : 'memo',
											anchor : '95%'
										}]
							}]

				}],
		buttons : [{
			text : '保存',
			handler : function() {
				// 判断接口名称不能为空
				var exName = interfaceForXlsImportPanel.findById("exName")
						.getValue();
				if ("" == exName || exName == null) {
					interfaceForXlsImportPanel.findById("exName").focus();
					Ext.Msg.show({
								title : '提示',
								msg : '接口名称不能为空！',
								buttons : Ext.MessageBox.OK
							});
					return;
				}

				// 获取grid里的记录，修改的和新增的

				// var modified = interfaceForXlsImportStore.modified.slice(0);
				var modified = [];
				for (var i = 0; i < interfaceForXlsImportStore.getCount(); i++) {
					modified.push(interfaceForXlsImportStore.getAt(i));
				}
				// 判断grid里的记录是否为空，是否输入个是正确，是否有重复
				for (var i = 0; i < modified.length; i++) {
					var num = modified[i].data.cloNum;
					var patrn = new RegExp("^[A-Z]{1,2}$");

					if (null == num || "" == num
							|| null == modified[i].data.exSubCode
							|| "" == modified[i].data.exSubCode) {
						Ext.Msg.show({
									title : '提示',
									msg : '第' + (i + 1) + '行有数据没有填写！',
									buttons : Ext.MessageBox.OK
								});
						return;
					}
					if (!patrn.test(num)) {
						Ext.Msg.show({
									title : '提示',
									msg : '第'
											+ (i + 1)
											+ '行"对应cell位置"只能输入由A-Z组成的大写字母,如:"A，AB"！',
									buttons : Ext.MessageBox.OK
								});
						return;
					}

					for (var j = 0; j < i; j++) {
						if (i != j
								&& modified[j].data.cloNum == modified[i].data.cloNum
								|| modified[j].data.exSubCode == modified[i].data.exSubCode) {
							Ext.Msg.show({
										title : '提示',
										msg : '第' + (i + 1) + '行和第' + (j + 1)
												+ '行数据重复，请修改！',
										buttons : Ext.MessageBox.OK
									});
							return;
						}

					}
				}

				// 保存信息

				var interfaceStr = [];
				for (var i = 0; i < modified.length; i++) {
					var record = modified[i];
					interfaceStr.push(record.data);
				}
				Ext.Ajax.request({
							url : 'ExeclCustomize!insertOrUpdatePublicInteface.action',
							method : 'post',
							params : {
								exPublictype : typeCombox.getValue(),
								exClassId : exClassIdCombox.getValue(),
								exName : interfaceForXlsImportPanel
										.findById('exName').getValue(),
								memo : interfaceForXlsImportPanel
										.findById('memo').getValue(),
								exInterfaceId : interfaceForXlsImportPanel
										.findById('exInterfaceId').getValue(),
								intefaceDetail : "{\"interfaceStr\":"
										+ Ext.encode(interfaceStr) + "}"
							},
							success : function() {
								interfaceForXlsImporttGrid.getStore()
										.removeAll();
								interfaceForXlsImportWin.hide();
								interfaceForXlsSelectStore.reload();
								Ext.Msg.show({
											title : '操作信息',
											msg : '数据处理成功',
											buttons : Ext.Msg.OK
										});

							},
							failure : function() {
								Ext.Msg.show({
											title : '操作信息',
											msg : '数据处理异常,请联系管理员',
											buttions : Ext.Msg.OK
										});
							}

						});

			}
		}, {
			text : '删除',
			handler : function() {
				Ext.MessageBox.show({
					title : '提示',
					msg : '确定要删除该接口和所有子项吗?',
					buttons : Ext.MessageBox.OKCANCEL,
					fn : function(btn) {
						if (btn == "ok") {
							Ext.Ajax.request({
								url : 'ExeclCustomize!deleteByInterfaceId.action',
								method : 'post',
								params : {
									exInterfaceId : interfaceForXlsImportPanel
											.findById('exInterfaceId')
											.getValue()
								},
								success : function() {
									if (interfaceForXlsSelectStore != null) {
										interfaceForXlsImportWin.hide();
										interfaceForXlsSelectStore.reload();

									}
									Ext.Msg.show({
												title : '操作信息',
												msg : '数据处理成功',
												buttons : Ext.Msg.OK
											});
								},
								failure : function() {
									Ext.Msg.show({
												title : '操作信息',
												msg : '数据处理异常,请联系管理员',
												buttions : Ext.Msg.OK
											});
								}

							});
						}
						if (btn == "cancel") {
							return;
						}
					}

				});
			}
		}, {
			text : '取消',
			handler : function() {
				interfaceForXlsImportWin.hide();
			}
		}, {
			text : '增加细项',
			id : 'addItems',
			disabled : true,
			handler : function() {
				var initValue = {
					exSubInterfaceId : '',
					cloNum : '',
					exSubCode : ''
				};
				var p = new addInterfaceLine(initValue);
				interfaceForXlsImporttGrid.stopEditing();
				interfaceForXlsImportStore.insert(0, p);
				interfaceForXlsImporttGrid.startEditing(0, 2);
				interfaceForXlsImporttGrid.view.refresh();
				p.dirty = true;
				p.modified = initValue;
				if (interfaceForXlsImportStore.modified.indexOf(p) == -1) {
					interfaceForXlsImportStore.modified.push(p);
				}
			}
		}, {
			text : '删除细项',
			id : 'deleteItems',
			disabled : true,
			handler : function() {
				var deletedJson = [];
				var length = interfaceForXlsImporttGrid.getSelectionModel()
						.getSelections().length;
				if (length > 0) {
					Ext.MessageBox.show({
						title : '提示',
						msg : '您选中了' + length + '条记录进行删除,请问您确认吗?',
						buttons : Ext.MessageBox.OKCANCEL,
						fn : function(btn) {
							if (btn == "ok") {

								var rs = interfaceForXlsImporttGrid
										.getSelectionModel().getSelections();
								for (var i = 0; i < length; i++) {
									if (rs[i].data.exPublicId != "") {
										deletedJson.push(rs[i].data);
									}
									interfaceForXlsImportStore
											.remove(interfaceForXlsImportStore
													.getById(rs[i].id));
								};
								Ext.Ajax.request({
									url : 'ExeclCustomize!deleteSubInterfaceById.action',
									method : 'post',
									params : {
										exSubInterfaceId : "{\"exSubInterfaceIds\":"
												+ Ext.encode(deletedJson) + "}"
									},
									success : function() {
										interfaceForXlsImporttGrid.getStore()
												.reload();
										Ext.Msg.alert('提示', '删除成功！');

									},
									failure : function() {
										Ext.Msg.alert('警告', '由于异常原因，提交数据失败！');
									}
								});

							}
							if (btn == "cancel") {
								return;
							}
						}
					});
				} else {
					Ext.Msg.alert('警告', '请选择需要删除的记录.');
				}
			}
		}]

	});

	// 增加细项可编辑得行
	var addInterfaceLine = new Ext.data.Record.create([{
				name : 'exSubInterfaceId',
				type : "int"
			}, {
				name : 'cloNum',
				type : "string"
			}, {
				name : 'exSubCode',
				type : "string"
			}]);

	// 子表显示
	interfaceForXlsImportStore = new Ext.data.Store({
				proxy : new Ext.data.HttpProxy({
							url : 'ExeclCustomize!queryIntefaceDetail.action'
						}),
				reader : new Ext.data.JsonReader({
							root : 'publicIntefaceDetial.result',
							totalProperty : 'publicIntefaceDetial.totalCount'
						}, [{
									name : 'exSubInterfaceId',
									mapping : "exSubInterfaceId"
								}, {
									name : 'cloNum',
									mapping : "cloNum"
								}, {
									name : 'exSubCode',
									mapping : "exSubCode"
								}])
			});

	dycombox = new Ext.form.ComboBox({
				store : socialStore,
				displayField : 'showName',
				valueField : 'socialSecurityId',
				typeAhead : true,
				mode : 'local',
				id : 'statusCmb',
				triggerAction : 'all',
				selectOnFocus : true,
				anchor : '90%'
			})

	// 查询显示的表格
	var sm = new Ext.grid.CheckboxSelectionModel();

	payclasscm = new Ext.grid.ColumnModel([new Ext.grid.RowNumberer(), sm, {
				header : '对应Cell位置',
				dataIndex : 'cloNum',
				width : 150,
				editor : new Ext.form.TextField({
							id : 'cloNum'
						})
			}, {
				header : '字段名',
				dataIndex : 'exSubCode',
				id : 'testId',
				autoScroll : true,
				autoWidth : true,
				sortable : true,
				editor : new Ext.form.ComboBox({
							store : exClassItemsIdStore,
							displayField : 'name',
							valueField : 'payClassItemId',
							typeAhead : true,
							mode : 'local',
							id : 'name',
							triggerAction : 'all',
							selectOnFocus : true,
							anchor : '90%'
						}),
				renderer : function(value, cellmeta, record) {
					if (value == 'companycode') {
						return '公司编号';
					} else if (value == 'employeecode') {
						return '雇员编号';
					} else if (value == 'period') {
						return '时期';
					}
					
					// 通过匹配value取得ds索引
					var index = exClassItemsViewIdStore.find(
							Ext.getCmp('name').valueField, value);

					if (index == null || index == -1) {
						return '请选择...';
					}
					return exClassItemsViewIdStore.getAt(index).get('name');
				}
			}]);

	exSubNamecm = new Ext.grid.ColumnModel([new Ext.grid.RowNumberer(), sm, {
				header : '对应Cell位置',
				dataIndex : 'cloNum',
				width : 150,
				editor : new Ext.form.TextField({
							id : 'cloNum'
						})
			}, {
				header : '字段名',
				dataIndex : 'exSubCode',
				id : 'testId',
				autoScroll : true,
				autoWidth : true,
				sortable : true,
				editor : new Ext.form.ComboBox({
							store : empStore,
							displayField : 'exSubName',
							valueField : 'exSubCode',
							typeAhead : true,
							mode : 'local',
							id : 'exSubName',
							triggerAction : 'all',
							selectOnFocus : true,
							anchor : '90%'
						}),
				renderer : function(value, cellmeta, record) {

					// 通过匹配value取得ds索引
					var index = empAllStore.find(
							Ext.getCmp('exSubName').valueField, value);

					if (index == null || index == -1) {
						return '请选择...';
					}
					return empAllStore.getAt(index).get('exSubName');
				}
			}]);

	cm = new Ext.grid.ColumnModel([new Ext.grid.RowNumberer(), sm, {
				header : '对应Cell位置',
				dataIndex : 'cloNum',
				width : 150,
				editor : new Ext.form.TextField({
							id : 'cloNum'
						})
			}, {
				header : '字段名',
				dataIndex : 'exSubCode',
				id : 'testId',
				autoScroll : true,
				autoWidth : true,
				sortable : true,
				editor : new Ext.form.ComboBox({
							store : socialStore,
							displayField : 'showName',
							valueField : 'socialSecurityId',
							typeAhead : true,
							mode : 'local',
							id : 'showName',
							triggerAction : 'all',
							selectOnFocus : true,
							anchor : '90%'
						}),
				renderer : function(value, cellmeta, record) {
					if (value == 'companycode') {
						return '公司编号';
					} else if (value == 'employeecode') {
						return '雇员编号';
					} else if (value == 'period') {
						return '时期';
					}

					// 通过匹配value取得ds索引
					var index = socialStore.find(
							Ext.getCmp('showName').valueField, value);

					if (index == null || index == -1) {
						return '请选择...';
					}
					return socialStore.getAt(index).get('showName');
				}
			}]);

	interfaceForXlsImporttGrid = new Ext.grid.EditorGridPanel({
				height : 210,
				anchor : '90%',
				id : 'interfaceForXlsImporttGrid',
				clicksToEdit : 1,
				bbar : new Ext.PagingToolbar({
							pageSize : pageSize,
							store : interfaceForXlsImportStore,
							displayInfo : true,
							dispalyMsg : '显示第{0}条到{1}条记录，一共{2}条',
							emptyMsg : '没有记录'
						}),
				cm : cm,
				sm : sm,
				store : interfaceForXlsImportStore,
				loadMask : true,
				loadMask : {
					msg : '正在加载数据...'
				}
			});

	interfaceForXlsImportWin = new Ext.Window({
				closable : true,
				draggable : true,
				frame : true,
				region : 'center',
				title : 'Excel导入接口',
				width : 910,
				height : 450,
				plain : true,
				items : [interfaceForXlsImportPanel, interfaceForXlsImporttGrid],
				listeners : {
					"beforedestroy" : function(obj) {
						return false;
					},
					"beforeshow" : function(obj) {
						return true;
					}
				}
			});

	interfaceForXlsImportWin.show();
	interfaceForXlsImportWin.hide();
	return interfaceForXlsImportWin;

};
